package com.langchain4j.core.llm.model;

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 模型信息
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ModelInfo {
    
    /**
     * 模型ID
     */
    private String id;
    
    /**
     * 模型名称
     */
    private String name;
    
    /**
     * 提供者类型
     */
    private String providerType;
    
    /**
     * 模型类型
     */
    private ModelType modelType;
    
    /**
     * 支持的上下文长度
     */
    private Integer contextLength;
    
    /**
     * 支持的参数
     */
    private List<String> supportedParameters;
    
    /**
     * 模型能力
     */
    private List<ModelCapability> capabilities;
    
    /**
     * 价格信息
     */
    private PricingInfo pricing;
    
    /**
     * 状态
     */
    private ModelStatus status;
    
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    
    /**
     * 元数据
     */
    private Map<String, Object> metadata;
    
    /**
     * 模型类型枚举
     */
    public enum ModelType {
        CHAT,           // 对话模型
        COMPLETION,     // 补全模型
        EMBEDDING,      // 嵌入模型
        MULTIMODAL      // 多模态模型
    }
    
    /**
     * 模型能力枚举
     */
    public enum ModelCapability {
        TEXT_GENERATION,    // 文本生成
        TEXT_EMBEDDING,     // 文本嵌入
        CODE_GENERATION,    // 代码生成
        TRANSLATION,        // 翻译
        SUMMARIZATION,      // 摘要
        QUESTION_ANSWERING, // 问答
        SENTIMENT_ANALYSIS, // 情感分析
        IMAGE_GENERATION,   // 图像生成
        IMAGE_ANALYSIS      // 图像分析
    }
    
    /**
     * 模型状态枚举
     */
    public enum ModelStatus {
        ACTIVE,     // 活跃
        INACTIVE,   // 非活跃
        DEPRECATED, // 已弃用
        BETA        // 测试版
    }
    
    /**
     * 价格信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class PricingInfo {
        /**
         * 输入token价格（每1000个token）
         */
        private Double inputPricePer1kTokens;
        
        /**
         * 输出token价格（每1000个token）
         */
        private Double outputPricePer1kTokens;
        
        /**
         * 货币单位
         */
        private String currency;
        
        /**
         * 计费单位
         */
        private String billingUnit;
    }
} 